home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1996 March
/
EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso
/
earcd
/
dtype
/
fontdt11.lha
/
Src
/
prefs.c
< prev
Wrap
C/C++ Source or Header
|
1995-07-09
|
4KB
|
117 lines
/*
** prefs.c - prefrences handling for Font DataType class
** Copyright © 1995 Michael Letowski
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <dos/rdargs.h>
#include <support/types.h>
#include <support/dos.h>
#include <stdlib.h>
#include "classbase.h"
#include "prefs.h"
#include <proto/exec.h>
#include <proto/dos.h>
#define BUF_LEN 256
#define PREFS_PATH1 "PROGDIR:Prefs/DataTypes/font.prefs"
#define PREFS_PATH2 "ENV:DataTypes/font.prefs"
STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
struct Opts *opts, STRPTR name);
STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
LONG *opts, struct RDArgs *rda);
struct PrefsHandle *GetFontPrefs(struct ClassBase *cb, struct Opts *opts)
{
struct PrefsHandle *PH;
LBOOL Res=FALSE;
clear(opts); /* Set defaults */
try(newv(PH,MEMF_CLEAR), NO_PREFS);
try(PH->ph_RDA=AllocDosObject(DOS_RDARGS,NULL), NO_RDA);
fset(PH->ph_RDA->RDA_Flags,RDAF_NOPROMPT); /* Disable prompts */
if(ThisProcessS->pr_HomeDir) /* PROGDIR: exists? */
Res=ReadPrefs(cb,PH,opts,PREFS_PATH1); /* Try first path */
unless(Res) /* Args not read so far */
ReadPrefs(cb,PH,opts,PREFS_PATH2); /* Try second path */
return(PH);
catch(FOO, );
catch(NO_RDA, FreeDosObject(DOS_RDARGS,PH->ph_RDA));
catch(NO_PREFS, deletev(PH));
return(NULL);
} /* GetFontPrefs */
VOID FreeFontPrefs(struct ClassBase *cb, struct PrefsHandle *ph)
{
if(ph->ph_ArgsB) FreeArgs(ph->ph_ArgsB); /* Free background color args */
if(ph->ph_ArgsF) FreeArgs(ph->ph_ArgsF); /* Free foreground color args */
if(ph->ph_ArgsDPI) FreeArgs(ph->ph_ArgsDPI); /* Free DPI args */
if(ph->ph_Args) FreeArgs(ph->ph_Args); /* Free args */
ph->ph_RDA->RDA_Buffer=NULL; /* Don't free buffer */
FreeDosObject(DOS_RDARGS,ph->ph_RDA); /* Free additional args */
deletev(ph);
} /* FreeFontPrefs */
STATIC LBOOL ReadPrefs(struct ClassBase *cb, struct PrefsHandle *ph,
struct Opts *opts, STRPTR name)
{
CHAR Buffer[BUF_LEN];
struct RDArgs *RDA=ph->ph_RDA;
BPTR FH;
LBOOL Result=FALSE;
try(FH=Open(name,MODE_OLDFILE), NO_FILE);
RDA->RDA_Source.CS_Buffer=Buffer; /* Set up buffer to read from */
/* Read args */
if(FGets(FH,Buffer,BUF_LEN-1)) /* Got line from file */
if(ph->ph_Args=ReadArgsBuf(cb,TEMPLATE,(LONG *)opts,RDA))
{
if(opts->opt_DPI) /* DPI given */
{
strncpy(Buffer,opts->opt_DPI,BUF_LEN-2);
ph->ph_ArgsDPI=ReadArgsBuf(cb,TEMPLATEDPI,(LONG *)&opts->opt_XDPI,RDA);
}
if(opts->opt_Foreground) /* Foreground color given */
{
strncpy(Buffer,opts->opt_Foreground,BUF_LEN-2);
ph->ph_ArgsF=ReadArgsBuf(cb,TEMPLATEF,(LONG *)&opts->opt_ForeRed,RDA);
}
if(opts->opt_Background) /* Foreground color given */
{
strncpy(Buffer,opts->opt_Background,BUF_LEN-2);
ph->ph_ArgsB=ReadArgsBuf(cb,TEMPLATEB,(LONG *)&opts->opt_BackRed,RDA);
}
}
Result=TRUE;
catch(NO_FILE, Close(FH));
return(Result);
} /* ReadPrefs */
STATIC struct RDArgs *ReadArgsBuf(struct ClassBase *cb, STRPTR template,
LONG *opts, struct RDArgs *rda)
{
STRPTR Buffer=rda->RDA_Source.CS_Buffer;
LONG Len;
Len=strlen(Buffer); /* Get size of buffer */
Buffer[Len]='\n'; /* New line char */
Buffer[Len+1]='\0'; /* String terminator */
rda->RDA_Source.CS_Length=Len+1; /* Set up string len */
rda->RDA_Source.CS_CurChr=0; /* Set up current char */
rda->RDA_Buffer=NULL; /* As documented in AutoDocs */
return(ReadArgs(template,opts,rda)); /* Read arguments */
} /* ReadArgsBuf */